#pragma once

#include "NeroCore\NRtti.h"

namespace Engine
{
	class NFileSystem;
	class NDevice;
	class NClient;
	class NCamera;
	class NViewPort;
	class NGraphics;
}

namespace Engine
{
class NPlatform : public Core::NRtti
{
	RTTI_DECLARATIONS(NPlatform, Core::NRtti)
public:
	NPlatform(void);

	virtual ~NPlatform(void);

	virtual void Initialize() = 0;

	virtual void Deinitialize() = 0;

	virtual void Render() = 0;

	virtual void Update() = 0;

	virtual float GetDeltaTime() = 0;

	virtual float GetGameTime() = 0;

	virtual int GetFPS() = 0;

	virtual NDevice* GetDevice() = 0;

	virtual Engine::NCamera* GetCamera(){ return NULL; }

	virtual void SetCamera(Engine::NCamera* camera) = 0;

	virtual Engine::NFileSystem* GetFileSystem();

	Engine::NViewPort* GetViewPort();

	NGraphics* GetGraphics(){return mGraphics;}

protected:
	NFileSystem* mFileSystem;
	NViewPort* mViewPort;
	NClient* mClient;
	NGraphics* mGraphics;
};
}

Engine::NPlatform* GetPlatform();
Engine::NViewPort* GetViewPort();